/**
 * clue服务
 *
 * @author sxf
 * @email sxf02615@163.com
 * @date 2025/1/15
 */
package com.sxf.crm.service;


import com.sxf.crm.dto.*;
import com.sxf.crm.enums.CluePriority;
import com.sxf.crm.enums.ClueSource;
import com.sxf.crm.enums.ClueStatus;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;

public interface ClueService {
    
    Page<ClueDTO> listClues(String name, ClueSource source, ClueStatus status, CluePriority priority, Pageable pageable);
    
    ClueDTO updateClue(Long id, ClueRequest request, Long currentUserId);
    
    void deleteClue(Long id, Long currentUserId);
    
    ClueDTO getClue(Long id);
    
    void assignClue(Long clueId, Long ownerId, Long currentUserId);
    
    void claimClue(Long clueId, Long currentUserId);
    
    void recycleClue(Long clueId, Long currentUserId, ClueRecycleRequest request);
    
    void convertClue(Long clueId, ClueConvertRequest request, Long currentUserId);
    
    List<ClueDTO> getUserClues(Long userId);
    
    List<ClueDTO> getUnassignedClues();
    
    void autoRecycleStaleClues();

    ClueDTO createClue(ClueRequest request, Long currentUserId);

    void followupClue(Long clueId, ClueFollowUpRequest request, Long currentUserId);

    void acceptClue(Long id, Long currentUserId);
} 